"""
Author: HuWen
@file: page_tankinfo.py
@dateTime: 2025/8/18 09:42
加油加油！！！
"""
from playwright.sync_api import Page
from common.base_page import BasePage
from common.locate_by import By
from locators.basicSecurityInformation.basicProcessInfo.loc_tankinfo import TankInfoLoc
import random
import logging

class TankPage(BasePage):
    logger = logging.getLogger(__name__)

    def selectnew(self, loc: dict, text=None, **kwargs):
        """
        处理下拉选项，支持在相同选项文本的多个下拉框中精准定位
        :param loc: 元素的属性（包含下拉框定位信息）
        :param text: 待选项的值，不提供则随机选择
        :return:
        """
        if text == "":
            return

        # 1. 定位当前要操作的下拉框（combobox）并展开
        combobox = None
        if loc.__contains__('page_role'):
            page_role = loc["page_role"]
            page_title = loc["page_title"]
            loc_role = loc["loc_role"]
            loc_name = loc["loc_name"]
            logging.info(f"在{page_title}页面，定位下拉框: {loc_role} - {loc_name}")
            # logger.info(f"在{page_title}页面，定位下拉框: {loc_role} - {loc_name}")
            # 精确定位当前下拉框
            combobox = self.page.get_by_role(page_role, name=page_title, **kwargs). \
                get_by_role(loc_role, name=loc_name, **kwargs)
        else:
            loc_role = loc["loc_role"]
            loc_name = loc["loc_name"]
            logging.info(f"定位下拉框: {loc_role} - {loc_name}")
            # logger.info(f"定位下拉框: {loc_role} - {loc_name}")
            combobox = self.page.get_by_role(loc_role, name=loc_name, **kwargs)

        # 展开下拉框（确保选项加载）
        combobox.press('Enter')
        # 等待选项加载完成（根据实际情况调整等待时间）
        self.page.wait_for_timeout(300)

        # 2. 在当前下拉框内部查找所有选项（关键：限定范围）
        # 注意：根据实际页面结构调整选择器（如'.el-select-dropdown__item'或'option'）
        options =  self.page.get_by_role('option')

        # 3. 获取选项文本并选择
        all_options = options.all()
        all_contents = [opt.text_content().strip() for opt in all_options if opt.text_content()]

        if not all_contents:
            # logger.warning("未找到下拉选项")
            logging.warning("未找到下拉选项")
            return

        if text is None:
            # 随机选择一个选项
            inx = random.randint(0, len(all_contents) - 1)
            target_text = all_contents[inx]
        else:
            target_text = text

        # 4. 在当前下拉框内精确选择目标选项
        # logger.info(f"选择选项：{target_text}")
        logging.info(f"选择选项：{target_text}")
        # 限定在当前下拉框的选项中查找，避免全局冲突
        target_option = options.filter(has_text=target_text).first
        target_option.click()

    def __init__(self, page: Page):
        super().__init__(page)
        self.switch_menu("安全基础管理")
        self.switch_menu("生产档案(企业)")


    def createtank(self,location,tankname,area,height,capacity,photoinfo,note):
        self.check(TankInfoLoc.loc_tanklab)
        self.click(TankInfoLoc.loc_addtank)
        self.select(TankInfoLoc.loc_location,text=location)
        self.fill(TankInfoLoc.loc_tankname,text=tankname)
        self.fill(TankInfoLoc.loc_area,text=area)
        self.selectnew(TankInfoLoc.loc_cofferdam,text='无')
        self.fill(TankInfoLoc.loc_cofferdam_height,text=height)
        self.selectnew(TankInfoLoc.loc_collectpond,text='有')
        self.fill(TankInfoLoc.loc_collectionpoolcapacity,text=capacity)
        # self.fill(TankInfoLoc.loc_tankphoto,text=photoinfo)
        self.fill(TankInfoLoc.loc_note,text=note)
        self.click(TankInfoLoc.loc_confirm)
#查询新增的数据
    def querytank(self,name):
        self.fill(TankInfoLoc.loc_queryname,text=name)
        self.click(TankInfoLoc.loc_confirm_que)
#查看新增的数据
    def viewtank(self,name):
        #输入查询条件
        self.fill(TankInfoLoc.loc_queryname,text=name)
        #查询，等待查询结果
        self.click(TankInfoLoc.loc_confirm_que)

        # 构造选择器，通过角色（button）和名称（"查看"）定位
        # view_selector = f'role={TankInfoLoc.loc_view["loc_role"]}[name="{TankInfoLoc.loc_view["loc_name"]}"]'
        # self.page.wait_for_selector(
        #     view_selector,
        #     state="visible",
        #     timeout=5000
        # )
        # 1. 定位“查询结果第一行”（包含目标tankname的行）


        # 定位包含name的单元格（角色为cell）
        tankname_cell = self.page.get_by_role(By.cell, name=name)
        # 从单元格向上定位到“行”（角色为row）
        result_row = tankname_cell.locator("..")  # ".." 表示父元素（行容器
        # 3. 行内定位“查看”按钮并点击
        view_button = result_row.get_by_role(By.button, name="查看")
        view_button.wait_for(state="visible", timeout=5000)
        view_button.click()

        # 4. 点击“关闭”按钮
        self.click(TankInfoLoc.loc_close)
#编辑新增的数据
    def edittank(self,name,noetedit):
        self.fill(TankInfoLoc.loc_queryname,text=name)
        #查询，等待查询结果
        self.click(TankInfoLoc.loc_confirm_que)
        # 定位包含name的单元格（角色为cell）
        tankname_cell = self.page.get_by_role(By.cell, name=name)
        # 从单元格向上定位到“行”（角色为row）
        result_row = tankname_cell.locator("..")  # ".." 表示父元素（行容器
        edit_button = result_row.get_by_role(By.button, name="编辑")
        edit_button.wait_for(state="visible", timeout=5000)
        edit_button.click()
        self.fill(TankInfoLoc.loc_editnote,text=noetedit)
        self.click(TankInfoLoc.loc_editconfirm)





#删除编辑后的数据
    def remove(self,name):
        self.fill(TankInfoLoc.loc_queryname,text=name)
        #查询，等待查询结果
        self.click(TankInfoLoc.loc_confirm_que)
        # 定位包含name的单元格（角色为cell）
        tankname_cell = self.page.get_by_role(By.cell, name=name)
        # 从单元格向上定位到“行”（角色为row）
        result_row = tankname_cell.locator("..")  # ".." 表示父元素（行容器
        edit_button = result_row.get_by_role(By.button, name="删除")
        edit_button.wait_for(state="visible", timeout=5000)
        edit_button.click()
        #二次弹窗点击确定
        self.click(TankInfoLoc.loc_delete)